

using System.Linq;
using System;

namespace GameLogic
{
    public static partial class GameUtility
    {
        /// <summary>
        /// 拼接多个 byte[] 数组
        /// </summary>
        public static byte[] CombineBytes(params byte[][] arrays)
        {
            int totalLength = arrays.Sum(a => a.Length);
            byte[] result = new byte[totalLength];
            int offset = 0;

            foreach (var arr in arrays)
            {
                Buffer.BlockCopy(arr, 0, result, offset, arr.Length);
                offset += arr.Length;
            }

            return result;
        }

        /// <summary>
        /// 将语义化版本号（如 "1.2.3"）转换为固定格式的数字（如 10203）。
        /// 每个部分占用两位数字，不足补零。
        /// </summary>
        public static int ConvertVersionToNumber(string version)
        {
            if (string.IsNullOrEmpty(version))
                throw new ArgumentException("Version string cannot be null or empty.");

            // 分割版本号（兼容可能的非标准格式，如 "1.2"）
            string[] parts = version.Split('.');
            if (parts.Length < 1 || parts.Length > 3)
                throw new FormatException("Version format must be Major.Minor.Patch or similar.");

            // 解析各部分为整数，默认补零
            int major = parts.Length > 0 ? int.Parse(parts[0]) : 0;
            int minor = parts.Length > 1 ? int.Parse(parts[1]) : 0;
            int patch = parts.Length > 2 ? int.Parse(parts[2]) : 0;

            // 确保每部分不超过两位数（0-99）
            if (major >= 100 || minor >= 100 || patch >= 100)
                throw new OverflowException("Version parts must be less than 100.");

            // 组合为固定格式的数字
            return major * 10000 + minor * 100 + patch;
        }

        /// <summary>
        /// 把Long类型的值，裁剪成Uint
        /// </summary>
        public static uint LongToUint(long value)
        {
            return (uint)(value & 0xFFFFFFFF);
        }
    }
}